package de.westnordost.streetcomplete.data.meta;

import java.util.List;

import de.westnordost.streetcomplete.data.osm.tql.FiltersParser;
import de.westnordost.streetcomplete.data.osm.tql.TagFilterExpression;
import de.westnordost.osmapi.map.data.Relation;
import de.westnordost.osmapi.map.data.Way;

/** Definitions which closed ways and which relations are areas */
public class OsmAreas
{
	private static final TagFilterExpression IS_AREA_EXPR = new FiltersParser().parse(
			" ways with area = yes or (" +
			" aeroway or amenity or boundary or building or craft or emergency or historic or" +
			" landuse or leisure or military or office or place or public_transport or shop or" +
			" tourism or building:part or" +
			" aerialway = station or railway = station or" +
			" power ~ compensator|converter|generator|plant|substation or" +
			" waterway ~ boatyard|dam|dock|riverbank|fuel" +
			")"
	);

	public static boolean isArea(Way way)
	{
		List<Long> nodeIds = way.getNodeIds();
		long firstNode = nodeIds.get(0);
		long lastNode = nodeIds.get(nodeIds.size() - 1);
		return firstNode == lastNode && IS_AREA_EXPR.matches(way);
	}

	public static boolean isArea(Relation relation)
	{
		if(relation.getTags() == null) return false;
		if(!relation.getTags().containsKey("type")) return false;
		return relation.getTags().get("type").equals("multipolygon");
	}
}
